// console.log('----------------------------------------------------');
// class Count {
//     constructor(limit){
//         this.data =  1;
//         this.limit = limit;
//     }
//     next(){
//         if(this.data <= this.limit){
//             return {done:false,value:this.data++}
//         }else {
//             return {done:true,value:undefined}
//         }
//     }
//     [Symbol.iterator](){
//         return this;
//     }
// }
// const counter = new Count(5);
// for(let item of counter){
//     console.log(item);
// }
// 1
// 2
// 3
// 4
// 5
// for(let item of counter){
//     console.log(item);
// }
// nothing log
// console.log('-----------------------------------------------------');
// class Counter1 {
//     constructor(limit){
//         this.count = 1;
//         this.limit = limit;
//     }
//     [Symbol.iterator](){
//         let count = 1;
//         let limit = this.limit;
//         return {
//             next(){
//                 if(count <= limit){
//                     return { done:false,value: count++}
//                 } else {
//                     return { done:true,value:undefined};
//                 }
//             }
//         }
//     }
// }
// const count1 = new Counter1(6);
// for(let item of count1){
//     console.log(item);
// }
// for(let item of count1){
//     console.log(item);
// }
// 1
// 2
// 3
// 4
// 5
// 6
// 1
// 2
// 3
// 4
// 5
// 6
// const iter1 = count1[Symbol.iterator]();
// console.log(iter1);
// console.log(iter1[Symbol.iterator]);

// let arr = ['foo', 'bar', 'baz']; 
// let iter1 = arr[Symbol.iterator](); 
// console.log(iter1[Symbol.iterator]); // f values() { [native code] } 
// let iter2 = iter1[Symbol.iterator](); 
// console.log(iter1 === iter2); // true
console.log('----------------------------------------------------------------------n');
class Counter {
    constructor(limit){
        this.limit = limit;
    }
    [Symbol.iterator](){
        let count = 1;
        let limit = this.limit;
        return {
            next(){
                if(limit >= count){
                    return { done:false,value:count++}
                } else {
                    return { done:true,value:undefined}
                }
            },
            return(){
                console.log('hello,你中途放弃iterator');
                return { done:false,value:'iterator !!!'}
            }
        }
    }
}

const count = new Counter(8);
for(let item of count){
    if(item > 3){
        console.log(item);
        break;
    }
    console.log(item);
}
console.log('--------------------------');
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
for(let item of count){
    if(item > 6){
        console.log(item);
        break;
    }
    console.log(item);
}
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// hello,你中途放弃iterator
try{
    for(let item of count){
        if(item > 3){
            console.log(item);
            throw 'item > 3'
        }
        console.log(item);
    }
}catch(e){
    console.log(e);
}
// 1
// 2
// 3
// 4
// hello,你中途放弃iterator
// item > 3
const count1 = new Counter(5);
let [a,b] = count1;//hello,你中途放弃iterator

console.log('----------------------------------------------------------------------');
let arr = ['1','2','3','4','5'];
const arrIterator = arr[Symbol.iterator]();
for(let item of arrIterator){
    if( item >= 3){
        console.log(item);
        break;
    }
    console.log(item);
}
// 1
// 2
// 3
for(let item of arrIterator){
    console.log(item);
}
// 4
// 5